#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType; 
typedef struct 
{	ElemType data[MaxSize];		//存放顺序表元素
   	int length;					//存放顺序表的长度
} SqList;	
void CreateList(SqList *&L,ElemType a[],int n)
//建立顺序表
{
	L=(SqList *)malloc(sizeof(SqList));
	for (int i=0;i<n;i++)
		L->data[i]=a[i];
	L->length=n;
}
void InitList(SqList *&L)
{
	L=(SqList *)malloc(sizeof(SqList));	//分配存放线性表的空间
	L->length=0;
}
void DestroyList(SqList *&L)
{
	free(L);
}
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}
int ListLength(SqList *L)
{
	return(L->length);
}
void DispList(SqList *L)
{
	for (int i=0;i<L->length;i++)
		printf("%d ",L->data[i]);
	printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)
{
	if (i<1 || i>L->length)
		return false;
	e=L->data[i-1];
	return true;
}
int LocateElem(SqList *L, ElemType e)
{
	int i=0;
	while (i<L->length && L->data[i]!=e) i++;
	if (i>=L->length)
		return 0;
	else
		return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
	if (i<1 || i>L->length+1)
		return false;
	i--;						//将顺序表位序转化为elem下标
	for (j=L->length;j>i;j--) 	//将data[i]及后面元素后移一个位置
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;				//顺序表长度增1
	return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
	int j;
	if (i<1 || i>L->length)
		return false;
	i--;						//将顺序表位序转化为elem下标
	e=L->data[i];
	for (j=i;j<L->length-1;j++)	//将data[i]之后的元素前移一个位置
		L->data[j]=L->data[j+1];
	L->length--;				//顺序表长度减1
	return true;
}

void MergeList(SqList *&La, SqList *&Lb, SqList *Lc) {
    int i = 0, j = 0, k = 1;
    // DispList(La);
    // DispList(Lb);
    // printf("%d\n",La->length);
    // printf("%d\n",Lb->length);
    while (i < La->length && j < Lb->length) {
        if (La->data[i] <= Lb->data[j]) {
            ListInsert(Lc, k, La->data[i]);
            // printf("La第%d个数小于等于Lb第%d个数\n",i+1,j+1);
            i++;
        } else {
            // printf("Lb第%d个数小于等于La第%d个数\n",i+1,j+1);
            ListInsert(Lc, k, Lb->data[j]);
            j++;
        }
        k++;
    }
    // 将剩余的元素插入到Lc中
    while (i < La->length) {
        ListInsert(Lc, k, La->data[i]);
        i++;
        k++;
    }
    while (j < Lb->length) {
        ListInsert(Lc, k, Lb->data[j]);
        j++;
        k++;
    }
    DispList(Lc);
}
int main(){
    SqList *L;
    SqList *K;
    // printf("(1)初始化顺序表L\n");
    InitList(L);
    InitList(K);
    // printf("(2)输入顺序表的长度M:\n");
    int l = 0;
    scanf("%d",&l);
    // printf("(3)依次插入M个元素\n");
    int a[10];
    for (int i = 0;i < l;i++)
        {
            scanf("%d",&a[i]);
            ListInsert(L,i+1,a[i]);
        }

    int k = 0;
    scanf("%d",&k);
    int b[10];
    for (int i = 0;i < k;i++)
        {
            scanf("%d",&b[i]);
            ListInsert(K,i+1,b[i]);
        }

    printf("合并两个有序顺序表：\n");

    SqList *J;
    InitList(J);
    MergeList(L,K,J);
    return 0;

}